/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package info.toegepaste.www.dataaccess;

import info.toegepaste.www.beans.Alumnus;
import info.toegepaste.www.beans.Event;
import info.toegepaste.www.beans.Inschrijving;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Logic
 */
public class DAInschrijving {

    private Connection connection = null;

    public DAInschrijving(String url, String login, String password) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(url, login, password);
    }

    public void close() throws SQLException {
        if (connection != null) {
            connection.close();
        }
    }

    public Inschrijving getInschrijving(int id) {
        DAAlumnus daalumnus = new DAAlumnus(connection);
        DAEvent daevent = new DAEvent(connection);
        Inschrijving inschrijving = new Inschrijving();
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try {
            statement = connection.prepareStatement("SELECT  * FROM inschrijving where id = ?");
            statement.setInt(1, id);
            resultSet = statement.executeQuery();
            if (resultSet.next()) {
                inschrijving.setInschrijvingID(resultSet.getInt("inschrijvingID"));
                inschrijving.setEvent(daevent.getEvent(resultSet.getInt("eventID")));
                inschrijving.setAlumnus(daalumnus.getAlumnus(resultSet.getInt("alumnusID")));
                inschrijving.setDatumInschrijving(resultSet.getDate("datumInschrijving"));
                inschrijving.setOpmerkingen(resultSet.getString("opmerkingen"));
                inschrijving.setAanwezig(resultSet.getBoolean("aanwezig"));

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                statement.close();
                daalumnus.close();
                daevent.close();
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
            }
        }
        return inschrijving;
    }

    public ArrayList<Inschrijving> getAlleInschrijvingen() {
        DAAlumnus daalumnus = new DAAlumnus(connection);
        DAEvent daevent = new DAEvent(connection);

        ArrayList<Inschrijving> resultaat = new ArrayList<Inschrijving>();
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement("select * from inschrijving");
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Inschrijving inschrijving = new Inschrijving();
                inschrijving.setInschrijvingID(resultSet.getInt("inschrijving.inschrijvingID"));
                inschrijving.setEvent(daevent.getEvent(resultSet.getInt("inschrijving.eventID")));
                inschrijving.setAlumnus(daalumnus.getAlumnus(resultSet.getInt("inschrijving.alumnusID")));
                inschrijving.setDatumInschrijving(resultSet.getDate("inschrijving.datumInschrijving"));
                inschrijving.setOpmerkingen(resultSet.getString("inschrijving.opmerkingen"));
                inschrijving.setAanwezig(resultSet.getBoolean("aanwezig"));



                resultaat.add(inschrijving);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                statement.close();
                if (resultSet != null) {
                    resultSet.close();
                    daalumnus.close();
                    daevent.close();
                }
            } catch (SQLException e) {
            }
        }
        return resultaat;
    }
    public ArrayList<Inschrijving> getAlleInschrijvingenMetCriteria(String criteria) {
        DAAlumnus daalumnus = new DAAlumnus(connection);
        DAEvent daevent = new DAEvent(connection);

        ArrayList<Inschrijving> resultaat = new ArrayList<Inschrijving>();
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement("select * from inschrijving order by " + criteria);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Inschrijving inschrijving = new Inschrijving();
                inschrijving.setInschrijvingID(resultSet.getInt("inschrijving.inschrijvingID"));
                inschrijving.setEvent(daevent.getEvent(resultSet.getInt("inschrijving.eventID")));
                inschrijving.setAlumnus(daalumnus.getAlumnus(resultSet.getInt("inschrijving.alumnusID")));
                inschrijving.setDatumInschrijving(resultSet.getDate("inschrijving.datumInschrijving"));
                inschrijving.setOpmerkingen(resultSet.getString("inschrijving.opmerkingen"));
                inschrijving.setAanwezig(resultSet.getBoolean("aanwezig"));



                resultaat.add(inschrijving);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                statement.close();
                if (resultSet != null) {
                    resultSet.close();
                    daalumnus.close();
                    daevent.close();
                }
            } catch (SQLException e) {
            }
        }
        return resultaat;
    }

    public boolean insertInschrijving(int eventID, int alumnusID, String opmerkingen, boolean aanwezig) {
        boolean resultaat = true;
        PreparedStatement statement = null;
        try {
            statement = connection.prepareStatement("insert into inschrijving (eventID, alumnusID, datumInschrijving, opmerkingen, aanwezig) values(?, ?, NOW(), ?, ?)");
            statement.setInt(1, eventID);
            statement.setInt(2, alumnusID);
            statement.setString(3, opmerkingen);
            statement.setBoolean(4, aanwezig);
            statement.executeUpdate();

        } catch (Exception e) {
            resultaat = false;
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
            }
        }
        return resultaat;
    }

    public ArrayList<Integer> getInschrijvingIDsAlumnus(int alumnusID) {
        ArrayList<Integer> IDs = new ArrayList<Integer>();
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement("select eventID from inschrijving WHERE alumnusID = ?");
            statement.setInt(1, alumnusID);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {

                IDs.add(resultSet.getInt(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }

                if (resultSet != null) {
                    resultSet.close();

                }
            } catch (SQLException e) {
            }
        }
        return IDs;
    }

    public ArrayList<Inschrijving> getInschrijvingenPerAlumnus(int alumnusid) {
        DAAlumnus daalumnus = new DAAlumnus(connection);
        DAEvent daevent = new DAEvent(connection);
        ArrayList<Inschrijving> inschrijvingen = new ArrayList<Inschrijving>();
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement("select * from inschrijving WHERE alumnusID = ?");
            statement.setInt(1, alumnusid);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Inschrijving inschrijving = new Inschrijving();
                inschrijving.setInschrijvingID(resultSet.getInt("inschrijving.inschrijvingID"));
                inschrijving.setEvent(daevent.getEvent(resultSet.getInt("inschrijving.eventID")));
                inschrijving.setAlumnus(daalumnus.getAlumnus(resultSet.getInt("inschrijving.alumnusID")));
                inschrijving.setDatumInschrijving(resultSet.getDate("inschrijving.datumInschrijving"));
                inschrijving.setOpmerkingen(resultSet.getString("inschrijving.opmerkingen"));
                inschrijving.setAanwezig(resultSet.getBoolean("aanwezig"));
                inschrijvingen.add(inschrijving);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }

                if (resultSet != null) {
                    resultSet.close();

                }
            } catch (SQLException e) {
            }
        }
        return inschrijvingen;

    }

    public ArrayList<Alumnus> getAlleAlumniPerEvent(int eventID) {
        DAAlumnus daalumnus = new DAAlumnus(connection);

        ArrayList<Alumnus> resultaat = new ArrayList<Alumnus>();
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement("select alumnusID from inschrijving WHERE eventID = ?");
            statement.setInt(1, eventID);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Alumnus alumnus = new Alumnus();
                alumnus = daalumnus.getAlumnus(resultSet.getInt("alumnusID"));
                resultaat.add(alumnus);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }

                if (resultSet != null) {
                    resultSet.close();

                }
            } catch (SQLException e) {
            }
        }
        return resultaat;
    }
}
